package n12_线程活跃性和锁粒度细分;

import lombok.extern.slf4j.Slf4j;

import static utils.Sleeper.sleep;

/**
 * @author fu
 * @date 2022-01-07 20:47
 * 概要：
 *   活锁： 两个线程 改变对方的结束条件
 *   解决条件：
 *      1.  执行时间 交错
 *      2.  睡眠时间随机数
 */
@Slf4j(topic = "c.T4")
public class T4_live_lock {

    static volatile   int count = 10;
    static final Object lock = new Object();

    public static void main(String[] args) {


        new Thread(() -> {
            // 期望超过 20 退出循环
            while (count > 0) {

                sleep(0.2);
                count--;
                log.debug("---: {}", count);

            }
        },"AAA").start();

        new Thread(() -> {
            // 期望超过 20 退出循环
            while (count < 20) {

                sleep(0.2);
                count++;
                log.debug("+++: {}", count);

            }
        },"BBB").start();
    }


}
